#!/bin/bash

# Sokit CLI Linux 构建脚本
# 构建命令行版本的sokit

set -e

echo "=========================================="
echo "Sokit CLI Linux 构建脚本"
echo "=========================================="

# 检查必要的工具
check_dependencies() {
    echo "检查依赖..."
    
    if ! command -v cmake &> /dev/null; then
        echo "错误: 未找到 cmake"
        exit 1
    fi
    
    if ! command -v g++ &> /dev/null; then
        echo "错误: 未找到 g++"
        exit 1
    fi
    
    # 检查Qt6
    if ! pkg-config --exists Qt6Core Qt6Network; then
        echo "警告: 未找到 Qt6 开发包"
        echo "请安装 Qt6 开发包:"
        echo "  Ubuntu/Debian: sudo apt install qt6-base-dev qt6-tools-dev"
        echo "  CentOS/RHEL: sudo yum install qt6-qtbase-devel qt6-qttools-devel"
        echo "  Arch: sudo pacman -S qt6-base qt6-tools"
    fi
    
    echo "依赖检查完成"
}

# 清理构建目录
clean_build() {
    echo "清理构建目录..."
    rm -rf build-cli
    mkdir -p build-cli
}

# 配置构建
configure_build() {
    echo "配置构建..."
    cd build-cli
    
    cmake .. \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_AUTOMOC=ON \
        -DCMAKE_AUTOUIC=ON \
        -DCMAKE_AUTORCC=ON \
        -DQT_QMAKE_EXECUTABLE=$(which qmake6 2>/dev/null || which qmake)
    
    cd ..
}

# 构建项目
build_project() {
    echo "构建项目..."
    cd build-cli
    
    # 只构建命令行版本
    cmake --build . --target sokit-cli --config Release -j$(nproc)
    
    cd ..
}

# 创建发布包
create_package() {
    echo "创建发布包..."
    
    PACKAGE_DIR="sokit-cli-linux"
    rm -rf $PACKAGE_DIR
    mkdir -p $PACKAGE_DIR
    
    # 复制可执行文件
    cp build-cli/bin/sokit-cli $PACKAGE_DIR/
    chmod +x $PACKAGE_DIR/sokit-cli
    
    # 创建README
    cat > $PACKAGE_DIR/README.txt << 'EOF'
Sokit CLI - Linux 命令行版本
================================

这是一个高性能的TCP/UDP数据转发工具的命令行版本。

使用方法:
---------
sokit-cli [选项] <源地址:端口> <目标地址:端口>

选项:
  -t, --tcp        使用TCP协议
  -u, --udp        使用UDP协议
  -v, --verbose    详细输出
  -q, --quiet      静默模式
  -s, --stats      显示传输统计
  --timeout <秒>   连接超时时间 (默认: 30秒)
  -h, --help       显示帮助信息
  --version        显示版本信息

示例:
------
# TCP转发: 将本地8080端口转发到远程服务器9090端口
sokit-cli -t 127.0.0.1:8080 192.168.1.100:9090

# UDP转发: 将本地9090端口转发到远程服务器8080端口
sokit-cli -u 127.0.0.1:9090 192.168.1.100:8080

# 显示详细信息和统计
sokit-cli -t -v -s 127.0.0.1:8080 192.168.1.100:9090

# 静默模式运行
sokit-cli -t -q 127.0.0.1:8080 192.168.1.100:9090

特性:
-----
- 高性能TCP/UDP数据转发
- 支持高并发连接
- 实时传输统计
- 详细的连接日志
- 内存优化的缓冲区管理
- 跨平台支持

系统要求:
---------
- Linux x86_64
- Qt6 Runtime Libraries
- 网络连接

安装:
------
1. 解压此包到任意目录
2. 确保系统已安装Qt6运行时库
3. 运行: ./sokit-cli --help

许可证:
-------
GPL v3 - 详见LICENSE文件
EOF

    # 创建安装脚本
    cat > $PACKAGE_DIR/install.sh << 'EOF'
#!/bin/bash

# Sokit CLI 安装脚本

set -e

echo "安装 Sokit CLI..."

# 检查是否为root用户
if [ "$EUID" -eq 0 ]; then
    INSTALL_DIR="/usr/local/bin"
    echo "以root权限安装到系统目录: $INSTALL_DIR"
else
    INSTALL_DIR="$HOME/.local/bin"
    echo "安装到用户目录: $INSTALL_DIR"
    mkdir -p $INSTALL_DIR
fi

# 复制可执行文件
cp sokit-cli $INSTALL_DIR/
chmod +x $INSTALL_DIR/sokit-cli

echo "安装完成!"
echo "使用方法: sokit-cli --help"

# 检查PATH
if [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then
    echo ""
    echo "注意: $INSTALL_DIR 不在PATH中"
    echo "请将以下行添加到 ~/.bashrc 或 ~/.zshrc:"
    echo "export PATH=\"\$PATH:$INSTALL_DIR\""
fi
EOF

    chmod +x $PACKAGE_DIR/install.sh
    
    # 创建卸载脚本
    cat > $PACKAGE_DIR/uninstall.sh << 'EOF'
#!/bin/bash

# Sokit CLI 卸载脚本

set -e

echo "卸载 Sokit CLI..."

# 检查是否为root用户
if [ "$EUID" -eq 0 ]; then
    INSTALL_DIR="/usr/local/bin"
    echo "从系统目录卸载: $INSTALL_DIR"
else
    INSTALL_DIR="$HOME/.local/bin"
    echo "从用户目录卸载: $INSTALL_DIR"
fi

# 删除可执行文件
if [ -f "$INSTALL_DIR/sokit-cli" ]; then
    rm -f $INSTALL_DIR/sokit-cli
    echo "已删除: $INSTALL_DIR/sokit-cli"
else
    echo "未找到安装的文件: $INSTALL_DIR/sokit-cli"
fi

echo "卸载完成!"
EOF

    chmod +x $PACKAGE_DIR/uninstall.sh
    
    # 创建压缩包
    tar -czf sokit-cli-linux.tar.gz $PACKAGE_DIR/
    
    echo "发布包创建完成:"
    echo "  - 目录: $PACKAGE_DIR/"
    echo "  - 压缩包: sokit-cli-linux.tar.gz"
}

# 显示使用说明
show_usage() {
    echo ""
    echo "使用方法:"
    echo "  ./build_cli.sh [选项]"
    echo ""
    echo "选项:"
    echo "  --clean     清理构建目录"
    echo "  --help      显示此帮助信息"
    echo ""
    echo "构建的产品:"
    echo "  - sokit-cli: 命令行版本"
    echo "  - sokit-cli-linux.tar.gz: Linux发布包"
    echo ""
    echo "示例:"
    echo "  ./build_cli.sh                    # 完整构建"
    echo "  ./build_cli.sh --clean           # 清理后构建"
    echo ""
}

# 主函数
main() {
    case "${1:-}" in
        --clean)
            clean_build
            ;;
        --help|-h)
            show_usage
            exit 0
            ;;
        "")
            ;;
        *)
            echo "未知选项: $1"
            show_usage
            exit 1
            ;;
    esac
    
    check_dependencies
    clean_build
    configure_build
    build_project
    create_package
    
    echo ""
    echo "=========================================="
    echo "构建完成!"
    echo "=========================================="
    echo "可执行文件: build-cli/bin/sokit-cli"
    echo "发布包: sokit-cli-linux.tar.gz"
    echo ""
    echo "测试命令:"
    echo "  ./build-cli/bin/sokit-cli --help"
    echo ""
}

# 运行主函数
main "$@" 